#include <stdlib.h>
#include <stdio.h>
#include <vector>

using namespace std;

typedef struct {
  int x;
  int y;
}ponto;


void le_pontos(int quantidade, vector<ponto> &partido){
    
    int x1,x2,y1,y2;
    ponto auxiliar;
    
    for ( int i = 0; i < quantidade; i++ ) {
      scanf("%d %d %d %d\n", &x1, &y1, &x2, &y2);
      auxiliar.x = x1;
      auxiliar.y = y1;
      partido.push_back(auxiliar);
      auxiliar.x = x1;
      auxiliar.y = y2;
      partido.push_back(auxiliar);
      auxiliar.x = x2;
      auxiliar.y = y1;
      partido.push_back(auxiliar);
      auxiliar.x = x2;
      auxiliar.y = y2;
      partido.push_back(auxiliar);
    }


}    

//Função para responder de qual lado da reta traçada entre 'a' e 'b' esta o ponto 'c'
int posicaoRelativaReta(ponto a, ponto b, ponto c) {

  //Para sair da divisão por 0  
  if (a.x == b.x)
    return 0;


  //calculando o coeficiente angular da reta 'a' -> 'b'
  double A = (a.y-b.y);
  A = A/(a.x-b.x);


  //calculando o coeficiente linear
  double B = b.y - A*(b.x);

  //verifica a posição relativa de 'c' usando a equação os coeficientes da reta encontrados
  double Y = A * c.x + B;

  if ( Y > c.y )
    return 1;
  else if ( Y == c.y )
    return 0;
  else
    return -1;
}

//Verifica a posição relativa dos pontos do Partido em relação a reta que passa por 'a' e 'b'
int encontraSide(ponto a, ponto b, vector<ponto> partido) {
 
  int PontosCoolineares = 0;
  int ladoAtual;
  //escolha arbitraria para diferenciar na primeira iteração
  int ladoPontoAnterior =  7;

  //Começa a procurar a orientação de cada ponto do Partido
  for ( int i=0; i < partido.size(); i++ ) {
    ladoAtual = posicaoRelativaReta(a,b,partido[i]); 
    if ( ladoAtual == 0 )
      PontosCoolineares++;
    if ( PontosCoolineares > 2 )
      return 0;
    if ( ladoAtual != ladoPontoAnterior) {
       
      //caso for a primeira passada  
      if ( ladoPontoAnterior == 7 && ladoAtual != 0)
        ladoPontoAnterior = ladoAtual;
      else if ( ladoAtual != 0 )
        return 0;
    }
  }
  return ladoPontoAnterior;
}


int backTrack(int ndoors,int npenguins, vector<ponto> doors, vector<ponto> penguins){

    int side_doors = 0;
    int side_penguins = 0;
    int resposta =0;

    for ( int i=0; i<ndoors; i++ ) {
      for ( int j=0; j<npenguins; j++) {
        side_doors = encontraSide(doors[i],penguins[j],doors);
        side_penguins = encontraSide(doors[i],penguins[j],penguins);
        if ( side_doors != side_penguins && side_doors != 0 && side_penguins != 0) {
          resposta = 1;
          break;
        }
      }
      if (resposta == 1)
        break;
    }
    return resposta;
}


int main(int argc, char *argv[]){

  int ndoors;
  int npenguins;
  int N = 1;
  int resposta = 0;

  while( scanf("%d %d\n",&ndoors,&npenguins)){
 
    //verifica se não há mais entradas
    if(ndoors == 0 && npenguins == 0)
      return 0;
    else if ( N > 1 ) printf("\n"); 

    //Vetores para armazenar os pontos de cada partido
    vector<ponto> doors;
    vector<ponto> penguins;
    

    //le pontos dos dois tipos
    le_pontos(ndoors,doors);
    le_pontos(npenguins,penguins);

    //cada estande constitue 4 pontos
    ndoors = ndoors*4;
    npenguins = npenguins*4;



    //Inicia o backTracking, testando cada reta entre cada par de pontos doors,penguin
    resposta = backTrack(ndoors,npenguins,doors,penguins);

    if ( resposta == 0 )
      printf("Case %d: It is not possible to separate the two groups of vendors.\n", N);
    if ( resposta == 1 )
      printf("Case %d: It is possible to separate the two groups of vendors.\n", N);
    N++;
  }
}
